from flask import jsonify
from flask_sqlalchemy import SQLAlchemy
from flask_cors import CORS
from flask_jwt_extended import JWTManager
from flask_migrate import Migrate

db = SQLAlchemy()
cors = CORS()
jwt = JWTManager()
migrate = Migrate()


def init_exts(app):
    # db 对象引用 app
    db.init_app(app=app)
    # cors 对象引用 app
    cors.init_app(app=app)
    # jwt 对象引用 app
    jwt.init_app(app=app)
    # 实例化为数据库创建表
    migrate.init_app(app=app, db=db)

    # 配置 JWT 的过期令牌。当令牌过期，返回设置的信息
    @jwt.expired_token_loader
    def my_expired_token_callback(jwt_header, jwt_payload):
        return jsonify(code=401, message='验证已过期，请重新登录')

    # 配置 JWT 的无效令牌
    @jwt.invalid_token_loader
    def invalid_token_callback(error):
        return jsonify(code=401, message='认证失败，请重新账号')
